#!/usr/bin/env tsx

/**
 * 手动启动测试服务器脚本
 * 用于手动测试API功能
 */

// import { TestServer } from '../../../tests/e2e/server/test-server.js';
import { DatabaseConfigLoader } from '@domain-craft/shared-types/config/database-config-loader';
import * as fs from 'fs';
import * as path from 'path';

// 解析命令行参数
function parseArgs() {
  const args = process.argv.slice(2);
  const config = {
    env: 'development',
    dbType: 'default'
  };
  
  for (let i = 0; i < args.length; i++) {
    const arg = args[i];
    if (arg === '--env' && i + 1 < args.length) {
      config.env = args[i + 1];
      i++;
    } else if (arg === '--db' && i + 1 < args.length) {
      config.dbType = args[i + 1];
      i++;
    } else if (arg === '--help' || arg === '-h') {
      console.log('使用方法: npm run start:server [-- --env <环境> --db <数据库类型>]');
      console.log('');
      console.log('选项:');
      console.log('  --env <环境>        指定环境 (development|test|production), 默认: development');
      console.log('  --db <数据库类型>   指定数据库类型 (default|postgres|mysql|sqlite|mongodb), 默认: default');
      console.log('  --help, -h         显示帮助信息');
      console.log('');
      console.log('示例:');
      console.log('  npm run start:server                           # 使用默认配置');
      console.log('  npm run start:server -- --env test --db sqlite # 使用测试环境的SQLite配置');
      console.log('  npm run start:server -- --db mysql            # 使用开发环境的MySQL配置');
      process.exit(0);
    }
  }
  
  return config;
}

async function startServer() {
  const { env, dbType } = parseArgs();
  
  console.log('🚀 启动 DSL ORM 测试服务器');
  console.log('================================');
  console.log(`📊 环境: ${env}`);
  console.log(`🗄️  数据库类型: ${dbType}`);
  
  // 加载数据库配置
  const configLoader = DatabaseConfigLoader.getInstance();
  const dbConfig = configLoader.getConnectionConfig(env, dbType);
  
  console.log(`🔗 连接到: ${dbConfig.type}://${dbConfig.host}:${dbConfig.port}/${dbConfig.database}`);
  
  // 自动扫描models目录下的所有YAML文件
  const modelsDir = path.join(process.cwd(), 'models');
  let modelFiles: string[] = [];
  
  if (fs.existsSync(modelsDir)) {
    modelFiles = fs.readdirSync(modelsDir)
      .filter(file => file.endsWith('.yml') || file.endsWith('.yaml'))
      .sort(); // 按字母顺序排序
    console.log(`📁 发现 ${modelFiles.length} 个DSL模型文件: ${modelFiles.join(', ')}`);
  } else {
    console.warn('⚠️  models目录不存在，将使用默认模型');
    modelFiles = ['user.yml', 'order.yml'];
  }
  
  // TODO: 重新实现 TestServer 或使用其他服务器实现
  console.log('🚧 开发服务器功能需要重新实现');
  console.log(`📊 配置信息:`);
  console.log(`  - 端口: 3001`);
  console.log(`  - 数据库配置: ${JSON.stringify(dbConfig, null, 2)}`);
  console.log(`  - 模型文件: ${modelFiles.join(', ')}`);
  
  try {
    // await server.start();
    
    console.log('\n📋 可用的API端点:');
    console.log('  GET    /health                    - 健康检查');
    console.log('  GET    /api                       - API文档');
    console.log('  GET    /api/users                 - 获取用户列表');
    console.log('  POST   /api/users                 - 创建用户');
    console.log('  GET    /api/users/:id             - 获取单个用户');
    console.log('  PUT    /api/users/:id             - 更新用户');
    console.log('  DELETE /api/users/:id             - 删除用户');
    console.log('  GET    /api/orders                - 获取订单列表');
    console.log('  POST   /api/orders                - 创建订单');
    console.log('  GET    /api/orders/:id            - 获取单个订单');
    console.log('  PUT    /api/orders/:id            - 更新订单');
    console.log('  DELETE /api/orders/:id            - 删除订单');
    
    console.log('\n🧪 测试示例:');
    console.log('  # 健康检查');
    console.log('  curl http://localhost:3001/health');
    console.log('');
    console.log('  # 创建用户');
    console.log('  curl -X POST http://localhost:3001/api/users \\');
    console.log('    -H "Content-Type: application/json" \\');
    console.log('    -d \'{');
    console.log('      "email": "test@example.com",');
    console.log('      "name": "Test User",');
    console.log('      "age": 25');
    console.log('    }\'');
    console.log('');
    console.log('  # 获取用户列表');
    console.log('  curl http://localhost:3001/api/users');
    console.log('');
    console.log('  # 创建订单');
    console.log('  curl -X POST http://localhost:3001/api/orders \\');
    console.log('    -H "Content-Type: application/json" \\');
    console.log('    -d \'{');
    console.log('      "orderNumber": "ORD-001",');
    console.log('      "amount": 99.99,');
    console.log('      "userId": "<用户ID>"');
    console.log('    }\'');
    
    console.log('\n✨ 开发服务器配置完成！按 Ctrl+C 退出');
    
    // 优雅关闭
    process.on('SIGINT', async () => {
      console.log('\n🛑 正在退出...');
      // await server.stop();
      console.log('✅ 已退出');
      process.exit(0);
    });
    
  } catch (error) {
    console.error('❌ 启动失败:', error);
    process.exit(1);
  }
}

startServer();